/**
 * EVENTOS CAPTURADOS JQUERY
 **/
$(window).before(function(){

    $('textarea.comentario').live('blur',function(){
        if($(this).val() == '')
            $(this).val('Escribe un comentario...');

    });

    //Submit de formularios (a excepcion de que se indique lo contrario)
    $('form:not(.upload):not(#frm_canciones):not(.not_handle)').live('submit',function(){
       
        //variables
        var form = $(this),
        formData = form.serialize(),
        formUrl = form.attr('action'),
        formMethod = form.attr('method')

        //$(document).trigger('cargando', {txt: form.attr('accion')});
        Common.cargando(form.attr('accion'));

        //envío de datos al servidor
        $.ajax({
            url: formUrl,
            type: formMethod,
            data: formData,
            success:function(data){
                Common.establecer_contenido(data);
                //$(document).trigger('descargando');
                Common.descargando();
            }
        });

        //para que el formulario no se envíe solito
        return false;
    });

    //Formulario principal de canciones
    $('form#frm_canciones').live('submit',function(){
        
        //variables
        var form = $(this),
        formData = form.serialize(),
        formUrl = form.attr('action'),
        formMethod = form.attr('method')

        //$(document).trigger('cargando', {txt: form.attr('accion')});
        Common.cargando(form.attr('accion'));
        //envío de datos al servidor
        $.ajax({
            url: formUrl,
            type: formMethod,
            data: formData,
            success:function(data){
                //Establecemos el contenido y recargamos el menú
                Common.establecer_contenido(data);
                
                Common.submenu.load('submenus/lista_canciones_submenu.php', function(){
                    Common.cargar_propiedades();
                });

                Common.descargando();
            }
        });

        //para que el formulario no se envíe solito
        return false;
    });

    $('.ver_comentarios').live('click',function(){ 
        var id_cancion = $(this).attr('cancion');
        var imagen = $(this).find('span');

        $.get("_info_cancion.php",{id_cancion:id_cancion, leyendo: true},function(data){
            var jsonData = jQuery.parseJSON(data);

            if(jsonData.error)
                Common.error(jsonData.error);

            else{
                $('#cancion-info').html(jsonData.info);
                $('#cancion-comentarios').html(jsonData.comentarios);
                Common.toggle('cancion-wrapper');
                imagen.removeClass('comentarios_no_leidos');
                imagen.addClass('comentarios_leidos');
            }
        });
    });

    $('.reproducir').live('click',function(){
       Canciones.add_cancion($(this).attr('cancion'));
    });

    $('.toggleFavorita').live('click',function(){
       var id_cancion = $(this).attr('cancion');
       var imagen = $(this).find('span');

       var accion = imagen.attr('class');

       $.get("_accion_cancion.php",{id_cancion: id_cancion, accion: accion}, function(data){

           var json = jQuery.parseJSON(data);

           if(!json.error){
               if(accion == 'del_favorita'){
                   imagen.removeClass('del_favorita');
                   imagen.addClass('add_favorita');
               }else{
                   imagen.removeClass('add_favorita');
                   imagen.addClass('del_favorita');
               }
           }else{
               Common.error(json.error);
           }
       });
    });

    $('.del_Comentario').live('click',function(){
        var comentario = $(this).attr('comentario');

        $.ajax({
            type: "GET",
            url: "_del_comentario.php",
            data: "id_comentario="+comentario,
            success: function(data){
                var jsonData = jQuery.parseJSON(data);
                if(jsonData.ok == 1){
                    $('#comentario-'+comentario).remove();
                }
                else{
                    Common.error(jsonData.error);
                }
            }
        });
    });

    $('.add_comentario:not(#cancion-comentarios .add_comentario)').live('click',function(){
        var id_cancion = $(this).attr('cancion');
        var comentario = $('#comentario-'+id_cancion).val();
        
        $.post("_add_comentario.php",{id_cancion: id_cancion, comentario: comentario, id_usuario: ID_USUARIO},function(data){
            var jsonData = jQuery.parseJSON(data);
            if(jsonData.ok == 1){
                $('textarea#comentario-'+id_cancion).val('Escriba un comentario...');
                //muestra el comentario en la lista de comentarios de la canción:
                Canciones.insert_comment(id_cancion, jsonData.id_comentario, jsonData.usuario, comentario, true, false);
                jsonData.comentario = comentario;
                XMPP.notificar_comentario(id_cancion, jsonData);
            }
            else{
                Common.error(jsonData.error);
            }
        });

    });

    $('#cancion-comentarios .add_comentario').live('click',function(){
        var id_cancion = $(this).attr('cancion');
        var comentario = $('#cancion-comentarios #comentario-'+id_cancion).val();

        $.post("_add_comentario.php",{id_cancion: id_cancion, comentario: comentario, id_usuario: ID_USUARIO},function(data){
            var jsonData = jQuery.parseJSON(data);
            if(jsonData.ok == 1){
                $('#cancion-comentarios #comentario-'+id_cancion).val('Escriba un comentario...');

                //muestra el comentario en la lista de comentarios de la canción:
                Canciones.insert_comment(id_cancion, jsonData.id_comentario, jsonData.usuario, comentario, true, true);
                //y si es la canción que se está reproduciendo lo muestra también en la lista de comentarios de la izquierda
                if(id_cancion == Canciones.get_id_cancion_reproduccion())
                    Canciones.insert_comment(id_cancion, jsonData.id_comentario, jsonData.usuario, comentario, true, false);
                jsonData.comentario = comentario;
                XMPP.notificar_comentario(id_cancion, jsonData);
            }
            else{
                Common.error(jsonData.error);
            }
        });

    });
});



/**
 * FUNCIONES PROPIAS DE CANCIONES
 */

var Canciones = {
    subida_por_mi : false,
    id_lista_viendo : 0,

    toggle_repro : function(id){
        Common.toggle('repro-'+id);
    },

    /* Devuelve el id de la cancion que se encuentra en reproducción */
    get_id_cancion_reproduccion: function(){
        var id_cancion = $('li.playing').attr('id_cancion');
        return id_cancion;
    },

    /**
     *Obtiene el id de la siguiente canción a reproducir
     */
    get_id_cancion_siguiente: function(){
        if(!Canciones.get_random()){
            var id_cancion = $('li.playing + li').attr('id_cancion');
            if(!id_cancion) id_cancion = $('#player_list').find('li').attr('id_cancion');
        }else{
            var length = $("#player_list li").length;
            var ran = Math.floor(Math.random()*length) + 1;
            var id_cancion = $("#player_list li:nth-child(" + ran + ")").attr('id_cancion');
        }
        return id_cancion;
    },
    /**
     *Indica si está activada la reproducción aleatoria
     */
    get_random: function(){
        if($('#aleatorio').attr('class') == 'activado') return true;
        return false;
    },

    reproducir_lista: function(lista){
        $.get('_get_ids_canciones_lista.php',{id_usuario: ID_USUARIO, lista: lista}, function(data){
            var json = jQuery.parseJSON(data);

            if(json.error)
                Common.error(json.error)
            else{
                var ids_canciones = json.ids_canciones;
                var array = ids_canciones.split('&');
                Canciones.get_player_list(ids_canciones, array[0], false)
            }
        });
    },

    /* Obtiene las canciones de la lista y las reproduce */
    reproducir_todas : function(){
        $('.chk').attr('checked','checked');
        Canciones.reproducir_canciones();
        $('.chk').removeAttr('checked');
    },

    /* Borra la lista de reproducción */
    clear_player_list: function(){
        $('#player_list').html('');
    },

    /* Agrega la canción a la lista de reproducción actual */
    add_cancion : function(id_cancion){
        var array_ids = new Array();
        array_ids.push(id_cancion);
        
        var array_ids_reproduccion = Canciones.array_canciones_reproduccion(); //ids de las canciones que están en la lista de reproducción actual

        if(!(Common.in_array(id_cancion, array_ids_reproduccion))){
            var ids = array_ids.join('&');

            $.get('_add_lista_reproduccion.php', {ids_canciones: ids}, function(data){
                Common.player_list.append(data);
            });
        }
    },

    /* Devuelve un array con los ids de las canciones que actualmente están en la lista de reproducción */
    array_canciones_reproduccion: function(){
        var array_ids_reproduccion = new Array();
        $('#player_list li').each(function(){
            array_ids_reproduccion.push($(this).attr('id_cancion'));
        });

        return array_ids_reproduccion;
    },
    
    /* Obtenemos todas las canciones seleccionadas y las pasamos al script _add_lista_reproduccion.php para que cree la lista.
     * Si estamos en el caso 'add' se indica que se quieren añadir, no reiniciar la lista, por lo que se añadirán sólo las canciones
     * que no estén ya en la lista...*/

    reproducir_canciones : function(add){
        var primero = true;
        var id_primera_cancion = null;

        var array_ids = new Array(); //ids de las canciones seleccionadas para reproducir
        var array_ids_reproduccion = Canciones.array_canciones_reproduccion(); //ids de las canciones que están en la lista de reproducción actual

        $('.chk_cancion:checked').each(function(){
            var id_cancion = $(this).attr('value');
            //agregamos la canción si no estamos en el caso add o si no está la canción en la lista de reproducción ya
            if(!(Common.in_array(id_cancion, array_ids_reproduccion)) || !add){
                array_ids.push(id_cancion);
                if(primero){
                    id_primera_cancion = id_cancion;
                    primero=false;
                }
            }
        });
        var ids = array_ids.join('&');

        // Por último obtenemos el html correspondiente: _add_lista_reproduccion.php crea elementos <li>
        Canciones.get_player_list(ids, id_primera_cancion, add);
    },
    /**
     * Obtiene los elementos li para la lista de reproducción y reproduce la canción con el id pasado.
     * El parámetro add indica si hay que reproducir o añadir a la lista de reproducción
     **/
    get_player_list: function(ids, id_reproducir, add){
        $.get('_add_lista_reproduccion.php', {ids_canciones: ids}, function(data){
            if(add){
                Common.player_list.append(data);
                Common.msg_resultado('Canciones agregadas', true);
            }
            else{
                Common.player_list.html(data);
                Canciones.reproducir_cancion(id_reproducir);
                Common.player_list.show();
            }
        });
    },
    
    reproducir_cancion: function(id_cancion){
        Common.reproductor.html('<div style="margin: 0 auto"><img src="../../img/ajax-loader.gif" /></div> ');
        Common.log('vamos a reproducir la cancion'+id_cancion);
        //Ahora hay que cargar la información y los comentarios de la canción
        $.get('_info_cancion.php',{id_cancion: id_cancion}, function(data){
            var json = jQuery.parseJSON(data);
            if(json.file){
                createPlayer(json.file);

                $('#player_list li').removeClass('playing');
                $('#cancion-'+id_cancion).addClass('playing');

                Common.info_cancion.html(json.info);
                Common.lista_comentarios.html(json.comentarios);
            }
        });
    },

    quitar_cancion: function(id_cancion){
        // Obtenemos el elemento
        var el = document.getElementById('cancion-'+id_cancion);
        // Obtenemos el padre de dicho elemento con la propiedad “parentNode”
        var padre = el.parentNode;
        // Eliminamos el hijo (el) del elemento padre
        padre.removeChild(el);
    },

    /*
     *Crea el html correspondiente al nuevo comentario y lo muestra en la lista de comentarios
     **/
    insert_comment : function(id_cancion, id_comentario, usuario, comentario, borrar, from_info){
        if(!from_info){
            //Insertamos el comentario en la lista de comentarios si es para la canción que se está reproduciendo
            $.get('_get_comment.php',{id_comentario: id_comentario, id_usuario: ID_USUARIO}, function(data){
                Common.lista_comentarios.prepend(data);
                $('#list_comments li:last').fadeIn();
            });
            
        }else{
            $.get('_get_comment.php',{id_comentario: id_comentario, id_usuario: ID_USUARIO}, function(data){
                $('#cancion-comentarios').prepend(data);
                $('#cancion_comentarios li:last').fadeIn();
            });
            
        }
    },
    
    descargar : function(){ 
        var ids = "";
        $('.chk_cancion').each(function(){
            if($(this).attr('checked'))
                ids += "ids[]="+$(this).attr('value')+"&";
        });
        window.open('_downloadSongs.php?'+ids);
    },
    eliminar : function(){
        $('.acciones').val(0);
        $('#del_canciones').val(1);
        Canciones.ejecutar_accion_y_buscar('Eliminando...');
    },
    /* LISTA DE FAVORITAS */
    add_favoritas : function(){
        $('.acciones').val(0);
        $('#add_favoritas').val(1);
        Canciones.ejecutar_accion_y_buscar('Agregando a favoritas...');
    },
    del_favoritas : function(){
        $('.acciones').val(0);
        $('#no_favoritas').val(1);
        Canciones.ejecutar_accion_y_buscar('Eliminando de favoritas...');
    },
    ver_favoritas : function(){
        Canciones.id_lista_viendo = 0;
        Common.reset_form('#frm_canciones');
        $('#fav').attr('checked','checked');
        Canciones.ejecutar_accion_y_buscar('Buscando favoritas...');
    },    
    /* LISTAS DE REPRODUCCION */
    new_lista_reproduccion : function(){
        var nombre = $('#new_lista').val();
        $('.acciones').val(0);
        $('#new_lista').val(nombre);
        Canciones.ejecutar_accion_y_buscar('Creando lista de reproducci&oacute;n...');
    },
    ejecutar_accion_y_buscar : function(texto_accion){
        if(Canciones.id_lista_viendo){
            $('#load_lista').val(1);
            $('#id_lista_reproduccion').val(Canciones.id_lista_viendo);
        }
        $('#buscar').val(1);
        $('#frm_canciones').attr('accion',texto_accion);
        $('#frm_canciones').submit();
    },
    // Evalúa la función guardada en "accion_lista" sobre la lista seleccionada en el select "lista_reproduccion"
    accion_lista: function(){
        var funcion = $('#accion_lista').val();
        var id_lista = $('#lista_reproduccion').val();

        if(id_lista > 0)
            eval('Canciones.'+funcion+'('+id_lista+')');
    },    
    add_to_lista : function(id_lista){
        $('.acciones').val(0);
        $('#add_to_lista').val(1);
        $('#id_lista').val(id_lista);
        Canciones.ejecutar_accion_y_buscar('Agregando...');
    },
    del_from_lista : function(id_lista){
        $('.acciones').val(0);
        $('#del_from_lista').val(1);
        $('#id_lista').val(id_lista);
        Canciones.ejecutar_accion_y_buscar('Eliminando...');
    },
    load_lista : function(id_lista){
        Canciones.id_lista_viendo = id_lista;
        Common.reset_form('#frm_canciones');
        Canciones.ejecutar_accion_y_buscar('Cargando lista...');
    },
    /* ---------------------- */
    buscar : function(no_lista){
        if(no_lista) Canciones.id_lista_viendo = null;
        $('.acciones').val(0);
        Canciones.ejecutar_accion_y_buscar('Buscando canciones...');
    },
    subir : function(){
        $('#subiendo').toggle();
        $('#crear').val(1);
        $('#frm_subir').submit();
    },
    cancion_subida : function(id_cancion, ok){
        //Mandamos el message XMPP indicando que se ha subido una canción
        if(ok){
            $('#subida-wrapper').toggle();
            $('#subiendo').toggle();

            $.get('subir.php',function(data){
                $('#subida-wrapper').html(data);
            });
            XMPP.notificar_cancion(id_cancion);
            Common.reset_form('#frm_subir');
            
        }
        //Common.ir_al_inicio();
    },
    
    /**
     * Esta función se ejecuta cuando se recibe una stanza message tras la subida de una nueva canción.
     * Llamamos por AJAX al script que devuelve la canción y lo añadimos a la capa de resultados, si está presente. Si no lo está mostramos un mensaje por pantalla.
     */
    show_new_song : function(id_cancion){
        Common.log('Nueva cancion a mostrar con id = '+id_cancion);
        if(!isNaN(id_cancion)){
            if((Common.mostrar_canciones && !Canciones.subida_por_mi) || Canciones.subida_por_mi){
                Common.log('cargamos por ajax la nueva cancion');
                $.get('_info_cancion_lista.php', {id_cancion: id_cancion}, function(data){
                    Common.log('mostrando la cancion en contenido_canciones');
                    $('#contenido_canciones').prepend(data);
                    Common.cargar_propiedades();
                });
            }if(!Canciones.subida_por_mi){
                $.get('_info_cancion.php',{id_cancion: id_cancion}, function(data){
                    var json = jQuery.parseJSON(data);
                    Common.msg_resultado('Nueva canc&oacute;n subida por '+json.usuario, true);
                });
            }
        }
    },
    
    /**
     * Esta función se ejecuta cuando se recibe una stanza message tras la subida de un nuevo comentario.
     * Mostramos el comentario donde procede
     */
    show_new_comment : function(id_cancion, id_comentario, usuario, comentario){
        if(!Canciones.subida_por_mi && $("ul#comentarios-"+id_cancion)){
            Common.log('Voy a mostrar un nuevo comentario.<br/>id cancion '+id_cancion+'<br/>id comentario '+id_comentario+'<br/>usuario '+usuario+'<br/>comentario '+comentario);
            Canciones.insert_comment(id_cancion, id_comentario, usuario, comentario, false);

            //Cambiamos la class para que se indique que hay comentarios sin leer
            $('a.ver_comentarios[cancion='+id_cancion+']').find('span').attr('class','comentarios_no_leidos');
        }
    }
}